package mall

import (
	"e_mall_server/models"
	"e_mall_server/service"
	"github.com/gin-gonic/gin"
	"go.uber.org/zap"
	"strconv"
)

/**
 * @Author: zhaobin
 * @Description TODO
 * @Date: 2022-05-19 22:28
 */

// GetAddressList 获取收获地址列表接口
func GetAddressList(c *gin.Context) {
	userId, err := strconv.ParseInt(c.Param("userId"), 10, 64)
	if err != nil {
		zap.L().Error("GetAddressList with invalid param", zap.Error(err))
		ResponseError(c, "传入参数错误")
		return
	}
	addressList, err := service.GetAddressList(userId)
	if err != nil {
		zap.L().Error("service.GetAddressList() failed", zap.Error(err))
		ResponseError(c, "查询收获地址列表失败")
		return
	}
	//zap.L().Debug("收获地址数据", zap.Any("value", addressList))
	ResponseSuccess(c, addressList)
}

// AddAddress 添加收获地址信息接口
func AddAddress(c *gin.Context) {
	address := models.Address{}
	if err := c.ShouldBind(&address); err != nil {
		zap.L().Error("AddAddress with invalid param", zap.Error(err))
		ResponseError(c, "请求参数错误")
		return
	}

	// 获取token中的id（后期加入token中id和前端传入的id判断是否相同）
	//userId, err := getCurrentUserId(c)
	//if err != nil {
	//	zap.L().Error("getCurrentUserId(c) failed", zap.Error(err))
	//	ResponseError(c, err.Error())
	//	return
	//}

	// 业务逻辑处理
	if err := service.AddAddress(&address); err != nil {
		zap.L().Error("service.AddAddress(&Address) failed", zap.Error(err))
		ResponseError(c, "增加收获地址失败 请重试")
		return
	}

	// 创建成功返回响应
	ResponseSuccess(c, nil)
}

// UpdateAddress 修改收获地址信息接口
func UpdateAddress(c *gin.Context) {
	address := models.Address{}
	if err := c.ShouldBind(&address); err != nil {
		zap.L().Error("UpdateAddress with invalid param", zap.Error(err))
		ResponseError(c, "请求参数错误")
		return
	}
	zap.L().Debug("address数据", zap.Any("value", address))
	// 业务逻辑处理
	if count := service.UpdateAddress(&address); count > 0 {
		// 创建成功返回响应
		ResponseSuccess(c, nil)
		return
	}
	ResponseError(c, "修改收获地址失败 请重试")
}

// DeleteAddress 删除收获地址接口
func DeleteAddress(c *gin.Context) {
	id, err := strconv.ParseInt(c.Param("id"), 10, 64)
	if err != nil {
		zap.L().Error("DeleteAddress with invalid param", zap.Error(err))
		ResponseError(c, "传入参数错误")
		return
	}
	count := service.DeleteAddressById(id)
	if count > 0 {
		ResponseSuccess(c, nil)
		return
	}
	ResponseError(c, "删除收获地址失败")
}

// GetAddressDetailById 通过id查询收获地址信息
func GetAddressDetailById(c *gin.Context) {
	id, err := strconv.ParseInt(c.Param("id"), 10, 64)
	if err != nil {
		zap.L().Error("GetAddressDetailById with invalid param", zap.Error(err))
		ResponseError(c, "请求参数错误")
	}
	address, err := service.GetAddressDetailById(id)
	if err != nil {
		zap.L().Error("service.GetAddressDetailById(id) failed", zap.Error(err))
		ResponseError(c, "获取管理员信息错误")
		return
	}
	ResponseSuccess(c, address)
}
